// 创建Axios实例
import axios from "axios";
// 导入名为 tokenStore 的模块，管理用户令牌 (token) 的存储和获取，@/store表示从项目的 store 目录导入
import { tokenStore } from "@/store";
// 导入路由实例，用于在需要时进行页面跳转
import router from "@/router";
// 从 element-plus 组件库中导入 ElMessage 组件
import { ElMessage } from "element-plus";

//创建一个自定义配置的axios实例
const service = axios.create({
    // 设置该实例的基础 URL，所有使用该实例的请求都会自动拼接这个前缀
    baseURL : 'http://127.0.0.1:9001', 
    timeout : 3000 //请求的超时时间
})

// 请求拦截器
service.interceptors.request.use(request=>{
    // 请求发送前的回调
    // 统一的对所有的请求做一些操作
    // 每一个请求前，将Token传递过去
    request.headers.token = tokenStore().token; // 从Pinia中取出来
    return request;
}, error=>{
    // 请求发送出错的回调
    return Promise.reject(error);
});
// 响应拦截器
service.interceptors.response.use(response=>{
    if (response.headers.token) {
        tokenStore().update(response.headers.token);
    }
    return response;
}, error=>{
    if (!error.response) return Promise.reject(error);; 
    if (error.response.status == 404){
        console.log("页面找不着！！");
    } else if (error.response.status == 403){
        // 权限不足
        ElMessage({
            message: error.response.data.msg,
            type: 'error',
            offset: 250,
        });
    } else if (error.response.status == 401) {
        // 用户没登录，跳转到登录页面
        router.push("/login");
    } else {
        // 响应出错的回调
        return Promise.reject(error);
    }
})

// 将创建的axios实例导出，供项目中其他地方导入使用
// 对外提供axios对象
export default service